AWS WAFのログを取得するLambdaをデプロイするCloudFormationテンプレート作ってみた
こんにちは、臼田です。
皆さん、Lambdaしてますか?
以前作成したAWS WAFのサンプルログを取得するLambdaをCloudFormationから簡単にデプロイ出来るようにしたので公開します。
2018/07/27追記 新しいバージョンを公開したのでこちらをご利用ください。
AWS WAFのログを取得する方法
ログの取得方法については下記ブログにて説明してありますのでご確認下さい。
設定方法
下記ボタンから直接CloudFormation画面に移動して設定が可能です。
設定するパラメータなどについては一部前回のブログにもありますが、合わせて説明します。
上記ボタンを押すとCloudFormationの画面に移動して、既にテンプレートのURLが入力されています。適当なスタック名を入力します。
パラメータを適当に入力します。パラメータの内容について以下解説します。
INTERVAL
ログの取得間隔(分)です。AWS WAFのサンプルログは5000件から500件抽出する特性のため、基本的にはWAFのログ(Ruleに引っかかるアクセス)が5000件発生する時間を指定します。最小で1分(CloudWatch Eventの制約)なので、1分間に5000ログ以上あるWEBサイトでは1を設定します。最長で179分(サンプルログの保持期間が3時間のため)が設定できます。
OutputBucket
WAFのログを保存するS3バケット名を指定します。ここで指定したBucketに対する書き込みのIAM Roleは自動的に作成されますが、バケットポリシーについては別途確認して下さい。
WAFType
WAFの適用先がALBかCloudFrontかを選択します。
WEBACLID
ログを取得するWebACLのIDを入力します。WebACLのIDはAWS WAFのWebACL一覧画面から確認することができます。
IAM Roleを作成するため確認が表示されます。チェックを入れて「作成」を押します。
以上で作成完了です。
テンプレートの解説
軽くテンプレートの説明をします。
Lambdaは「GetWAFSampleLambda」として作成されます。
必要なIAM Roleについては「GetWAFSampleLambdaRole」として作成され、CloudWatch Logsへの出力、WAFのサンプルログ取得、S3へのログの書き込みの権限があてられます。
「ScheduledRule」としてCloudWatch Eventでrate式のLambda定期実行イベントを作成します。
なお、rate式で1分を許容するために下記の仕組みを導入しています。
CloudFormationでCloudWatchイベントの実行間隔をパラメータで指定する時にrate式で1を設定するためのConditionsを書いてみた
まとめ
WAFの運用にはログの取得は欠かせません。サンプルログなので全てを取得することはできませんが、取得したものを分析することで誤検知の確認や攻撃の分析に利用できると思います。
是非このテンプレートを活用していただければと思います。